package com.xxwu.messagequeue.mqserver.core;

import lombok.Data;

import java.io.Serializable;
import java.util.UUID;


@Data
public class Message implements Serializable {
    // message 中的核心属性
    private BasicProperties basicProperties = new BasicProperties();
    private byte[] body;

    // 表示消息在文件中的位置，offsetBeg 表示消息的起始字节，offsetEnd 表示消息的末尾字节的下一个
    // 左闭右开
    // 在文件进行序列化的时候，这两属性不需要被序列化，在消息持久化进硬盘的时候，这个个属性就已经存在了
    // 不需要将这两个属性也存进硬盘中，于是这里使用 transient 来修饰
    private transient long offsetBeg = 0;
    private transient long offsetEnd = 0;

    // 表示文件是否有效
    private byte isValid = 0x1;

    // 由于 Message 内部的属性很多，创建一个工厂方法对 Message 进行初始化
    // 这 offsetBeg、offsetEnd、isValid 是进行持久化的时候才设定，这里只是在内存中创建 message
    public static Message createMessageWithId(String routingKey
            , BasicProperties basicProperties, byte[] body) {
        Message message = new Message();
        if(basicProperties != null){
            message.basicProperties = basicProperties;
        }

        message.basicProperties.setMessageId("M-" + UUID.randomUUID().toString());
        message.basicProperties.setRoutingKey(routingKey);
        message.setBody(body);
        return message;
    }

    public void setMessageId(String messageId) {
        this.basicProperties.setMessageId(messageId);
    }
    public String getMessageId() {
        return basicProperties.getMessageId();
    }

    public void getRoutingKey(String routingKey) {
        this.basicProperties.setRoutingKey(routingKey);
    }
    public String getRoutingKey(){
        return basicProperties.getRoutingKey();
    }
    public void setRoutingKey(String routingKey) {
        this.basicProperties.setRoutingKey(routingKey);
    }
    public int getDeliveryMode(){
        return basicProperties.getDeliveryMode();
    }
    public void setDeliveryMode(int deliveryMode){
        this.basicProperties.setDeliveryMode(deliveryMode);
    }
}
